哈囉大家好,今日密碼學的應用甚廣,也一直在發展中。文章前半部,會先介紹一個大家一定會用到的「密碼加鹽」機制;文章後半部,再列舉各領域中目前最廣泛之應用,供各位日後參考,我想也是見證這個時代的密碼學足跡吧。
我們不推薦 MD5 訊息摘要演算法 (MD5 Message-Digest Algorithm),原因是 MD5 在 1996 年就被證實存在弱點,可以被加以破解,所以對於需要高度安全性的資料,專家一般建議改用其他演算法,如 SHA-2;另外在 2004 年,已被證實 MD5 演算法無法防止碰撞 (collision),因此不適用於安全性認證,如 SSL 公開金鑰認證或是數位簽章等用途。
所以以後我們就把心力花在 SHA 安全雜湊演算法 (Secure Hash Algorithm) 上面囉。
/// <summary>
/// Hash and salt passwords.
/// 依據 HMACSHA1 使用虛擬亂數產生器,實作密碼式的金鑰衍生功能 PBKDF2 (密碼迭代)
/// </summary>
/// <param name="plainText"></param>
/// <param name="salt">Always use a new salt per password. Salts do not have to be kept secret and can be stored alongside the hash itself.</param>
/// <param name="KeySize">Output Key Size for PBKDF2</param>
/// <returns>Hashes and salts are binary blobs. No need to convert into strings.</returns>
static byte[] GenerateSaltedHash(byte[] plainText, byte[] salt, int KeySize)
{
byte[] plainTextWithSaltBytes =
new byte[plainText.Length + salt.Length];
for (int i = 0; i < plainText.Length; i++)
{
plainTextWithSaltBytes[i] = plainText[i];
}
for (int i = 0; i < salt.Length; i++)
{
plainTextWithSaltBytes[plainText.Length + i] = salt[i];
}
Rfc2898DeriveBytes rfcKey = new Rfc2898DeriveBytes(plainText, salt, 2);
return rfcKey.GetBytes(KeySize);
}
安總就不在各位面前搬門弄斧了,因為接下來各領域各有專業,深入實作下去就會發現許多細節,我若展開來,鐵人賽 100 天都不夠,所以謝謝您們喔,如果想要補充下列主題的先進大大,可以於本篇下方留言喔。
這是安總大學時期學計算機網路的教科書,2017 年出第七版啦 (撒花),每次教科書出新版我都很注意改版的內容,往往這些增修都能反映時代的軌跡,而參與其中、躬逢其盛的我們,是何等有幸。
《Computer Networking: A Top-Down Approach, 7/e》